<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>求两数组交集</title>
  </head>
  <body></body>
  <script>
    // 给定两个数组，写一个方法计算他们之间的交集
    // 什么是交集？ => 两个数组里边共同拥有的，就是他们的交集

    // 思路：循环两个数组，赋值给不同的变量值，判断两个变量值里面的数据，
    // 如果两个数字相同就取出里面相同的数字存放在新的数组里面

    let numsOne = [1, 2, 3, 4, 5, 6, 4];
    let numsTwo = [4, 5, 6, 7, 8, 9];

    // 出现的问题：
    // 如果第一个数组有一个相同的数字，第二个数组有两个，
    // 那么他们的交集也是按照只有一个相同的
    // 如果第一个数组有两个相同的数字，第二个数组有一个，
    // 那么他们的交集是有两个相同的

    // 创建一个新的空数组，把所有的交集都放进这个新的空数组里面
    let newArr = [];

    // 第一种：
    // 循环第一个数组
    numsOne.forEach((item, index) => {
      // 判断新数组 如果 == -1 就是不存在
      if (newArr.indexOf(item) == -1) {
        // 判断第二个数组里面是否有第一个数组里面的数字，
        numsTwo.includes(item) ? newArr.push(item) : null;
        // includes() 方法用于判断字符串是否包含指定的子字符串，
        // 如果找到匹配的字符串则返回 true，否则返回 false。
      }
      return newArr;
    });

    // 第二种：
    // let intersection = (arr1, arr2) => {
    //   return Array.from(new Set(arr1.filter((item) => arr2.includes(item))));
    //   // Set 是 es6 新增的数据结构，似于数组，但它的一大特性就是所有元素都是唯一的，没有重复的值，我们一般称为集合。
    //   // Array.from => 将类数组转化为真数组
    // };
    // });

    // // 循环第一个数组的每一项
    // for (let i = 0; i < numsOne.length; i++) {
    //   let item1 = numsOne[i];
    //   // 循环第二个数组的每一项
    //   for (let k = 0; k < numsTwo.length; k++) {
    //     let item2 = numsTwo[k];
    //     // 把循环的第一个数组与第二个数组进行比较
    //     if (item1 === item2) {
    //       // 如果第一项与第二项相同，就把他们存放在空数组里
    //       newArr.push(item1);
    //       // 如果第一项里面的数字与第二项里面的数字相同，直接结束里面循环
    //       break;
    //     }
    //   }
    // }

    console.log(newArr);
    // console.log(intersection(numsOne, numsTwo));
  </script>
</html>
